package accesoDatos;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import entidades.*;
import dataSet.*;

public class adComisiones extends adDatos{
	
	public int getIdUltimaComision()
    {
			Connection oCnn = crearConexion();
			int ultimoId=0;
			Statement cmdGetComision; 
           String sql = "SELECT MAX(id_comision) as id FROM comisiones;";
           try {
           	cmdGetComision = oCnn.createStatement();
           	
           	
           	ResultSet registro = cmdGetComision.executeQuery(sql);
           	if (registro.next()==true) {
       			registro.beforeFirst();
       	        
       	        while (registro.next()){
       	        	ultimoId = registro.getInt("id");
       	        	
       	        }
       	      }
           oCnn.close();
           
           	}catch (SQLException e) {
				e.printStackTrace();
				System.out.println("ERROR: Select comision.");
           	}
           
           	return ultimoId;



    	}

	
	
	 public void agregarComision(Comision comision)
     {
	Connection oCnn = crearConexion();
	StringBuilder sb = new StringBuilder();
    sb.append(" INSERT INTO comisiones( ");
    sb.append("     desc_comision, ");
    sb.append("     anio_especialidad, ");
    sb.append("     id_plan ");
    sb.append(" ) ");
    sb.append(" VALUES( '");
    sb.append(     comision.getDescripcion()+"',");
    sb.append(    	comision.getAnioEspecialidad()+",");
    sb.append(    	comision.getIdPlan() );
    sb.append(" ); ");
   
    Statement cmdAgregarComision;
  try {
		cmdAgregarComision =oCnn.createStatement();
		cmdAgregarComision.executeUpdate(sb.toString());
		 oCnn.close();
	}catch (SQLException e) {
		e.printStackTrace();
		System.out.println("no agrega comision");
	}
  
  
 }
	 public void borrarComision(int id_comision){
			Connection oCnn = crearConexion();
			 StringBuilder sb = new StringBuilder();
			 sb.append(" DELETE FROM comisiones ");
	         sb.append(" WHERE id_comision = "+id_comision+";");
	         Statement cmdBorrarComision;
	         try {
	     		cmdBorrarComision =oCnn.createStatement();
	    		cmdBorrarComision.executeUpdate(sb.toString());
	   		 	oCnn.close();
	         }catch (SQLException e) {
	     		e.printStackTrace();
	     		System.out.println("ERROR SQL: no borrra comision");
	     	}


     }

	 public void modificarComision(Comision comision)
     {
			Connection oCnn = crearConexion();

         //Creo el comando para ejecutar la sentencia SQL de DELETE,
         //le asocio la conexion tmb
         StringBuilder sb = new StringBuilder();
         sb.append(" UPDATE comisiones ");
         sb.append(" SET  ");
         sb.append("    desc_comision ='"+ comision.getDescripcion() +"',");
         sb.append("    anio_especialidad ="+ comision.getAnioEspecialidad()+" ,");
         sb.append("    id_plan = "+comision.getIdPlan()+",");
         sb.append("	WHERE id_comision = "+comision.getId()+";");
         Statement cmdModificarComision;
 		try {
 			cmdModificarComision = oCnn.createStatement();
 			cmdModificarComision.executeUpdate(sb.toString());
 			oCnn.close();
         
         oCnn.close();
 		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("ERROR SQL : NO MODIFICA COMISION");


 		}
     }
	 public Comision getComision(int idComision)
     {
			Connection oCnn = crearConexion();
            Comision  comision = new Comision();
            Statement cmdGetComision; 
            String sql = "SELECT * FROM comisiones WHERE id_comision = "+ idComision +";";
            try {
            	cmdGetComision = oCnn.createStatement();
            	
            	
            	ResultSet registro = cmdGetComision.executeQuery(sql);
            	if (registro.next()==true) {
        			registro.beforeFirst();
        	        
        	        while (registro.next()){
        	        	comision.setId(registro.getInt("id_comision"));
        	        	comision.setDescripcion(registro.getString("desc_comision"));
        	        	comision.setIdPlan(registro.getInt("id_plan"));
        	        	
        	        	
        	        }
        	      }
            oCnn.close();
            
            	}catch (SQLException e) {
				e.printStackTrace();
				System.out.println("ERROR: Select comision.");
            	}
            
            	return comision;



     	}

	 public ArrayList<Comision> recuperarTodas(){
			Connection oCnn = crearConexion();
           ArrayList<Comision> listacomisiones = new ArrayList<Comision>();
           Statement cmdRecuperarComisiones;
           String sql = "SELECT * FROM comisiones ORDER BY desc_comision";
           try {
           	cmdRecuperarComisiones = oCnn.createStatement();
           	ResultSet registro = cmdRecuperarComisiones.executeQuery(sql);
		 
           		if (registro.next()==true) {
           			registro.beforeFirst();
           			
           			while (registro.next()){
           				Comision comision = new Comision();
           	           	comision.setId(registro.getInt("id_comision"));
        	        	comision.setDescripcion(registro.getString("desc_comision"));
        	        	comision.setAnioEspecialidad(registro.getInt("anio_especialidad"));
        	        	comision.setIdPlan(registro.getInt("id_plan"));
        	        	listacomisiones.add(comision);
           			}
           			oCnn.close();
           			}
           			}catch (SQLException e) {
           				e.printStackTrace();
           				System.out.println("ERROR: Select lista de comisiones.");
           			}
	 

           return listacomisiones;	
           }
	 public ArrayList<ComisionPlan> recuperarComisionesParaABM(){//revisar
		 	ArrayList<ComisionPlan> comisionesPlanes = new ArrayList<ComisionPlan>() ;
		 	ComisionPlan comPlan;
	 		Connection oCnn = adDatos.crearConexion();
	        Statement cmdExe;
	        ResultSet registro;

           StringBuilder sb = new StringBuilder();

           //Recupero sólo los cursos de una materia en particular y que tengan cupo
           sb.append(" SELECT c.*, p.desc_plan ");
           sb.append(" FROM comisiones c ");
           sb.append(" INNER JOIN planes p ON c.id_plan = p.id_plan ");
           sb.append(" ORDER BY p.desc_plan, c.anio_especialidad, c.desc_comision ");
           
           try {
              	cmdExe = oCnn.createStatement();
              	 registro = cmdExe.executeQuery(sb.toString());
   		 
              		if (registro.next()==true) {
              			registro.beforeFirst();
              			
              			while (registro.next()){
              				comPlan = new ComisionPlan();
              				comPlan.setId(registro.getInt("c.id_comision"));
              				comPlan.setDescripcionComision(registro.getString("c.desc_comision"));
              				comPlan.setAnioEspecialidad(registro.getInt("c.anio_especialidad"));
              				comPlan.setIdPlan(registro.getInt("c.id_plan"));
              				comPlan.setDescripcionPlan(registro.getString("p.desc_plan"));
              				comisionesPlanes.add(comPlan);
              			}
              		}
           }catch (SQLException e) {
  				e.printStackTrace();
  				System.out.println("ERROR: Select lista de comisiones.");
  			}
           	return comisionesPlanes;
		 
	 }
	 
	 
	 public boolean estaAsociadaACurso(String idComision){//Chekear
		 
       Connection oCnn = adDatos.crearConexion();
       Statement cmdExe;
       ResultSet registro;
       boolean asociado=false;
       String sql = "SELECT * FROM cursos WHERE id_comision = '"+idComision+"';";
       try {
          	cmdExe= oCnn.createStatement();
          	 registro = cmdExe.executeQuery(sql);
          	if (registro.next()==true) {
      			asociado = true;
      		}
       }catch (SQLException e) {
				e.printStackTrace();
				System.out.println("ERROR: Select lista de comisiones.");
				}
  		
  		return asociado;
	 }

     public boolean existe(String descComision, String anio, String idPlan)//chekear
     {
         Connection oCnn = adDatos.crearConexion();

         Statement cmdExe;
         ResultSet registro;
         boolean asociado=false;
        String sql = "SELECT * FROM comisiones WHERE desc_comision = '"+descComision+"' AND anio_especialidad = "+anio +"AND id_plan = "+idPlan+";";

        try {
          	cmdExe= oCnn.createStatement();
          	 registro = cmdExe.executeQuery(sql);
          	if (registro.next()==true) {
      			asociado = true;
      		}
       }catch (SQLException e) {
				e.printStackTrace();
				System.out.println("ERROR: Select existe de comisiones.");
				}
  		
  		return asociado;
     	}
 }
